﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Classes
{
    public class MenuCliente
	{
        public MenuCliente(DBClientes dbClientes, DBVehiculos dbVehiculos, DBEquipos dbEquipos)
        {
            int opcionesMenu = 4;
            ConsoleKeyInfo tecla;
            string selection;

            Console.Clear();

            Console.WriteLine("Copilot S.A.");
            Console.WriteLine("");
            Console.WriteLine("Menu Clientes: ");
            Console.WriteLine("--------------");
            Console.WriteLine("1. Crear Cliente");
            Console.WriteLine("2. Agregar Vehiculo");
            Console.WriteLine("3. Ver Vehiculos de Cliente");
            Console.WriteLine("4. Volver");

            do
            {
                tecla = Console.ReadKey(true);
                selection = tecla.KeyChar.ToString();
            }
            while (!(verificarOpcion(selection, opcionesMenu)));

            switch (selection)
            {
                case "1":
                {
                    new AltaCliente(dbClientes);
                }
                break;
                case "2":
                {
                    agregarVehiculo(dbClientes, dbVehiculos, dbEquipos);
                }
                break;
                case "3":
                {
                    verVehiculosCliente(dbClientes);
                }
                break;
                case "4":
                {
                    return;
                }
                break;
            }

        }

        public Boolean verificarOpcion(string opcion, int opcionesMenu)
        {
            for (int i = 1; i <= opcionesMenu; i++)
                if (opcion == i.ToString())
                    return true;
            return false;
        }


        public Cliente buscarCliente(DBClientes dbClientes)
        {
            string dni;

            Console.Clear();
            Console.WriteLine("Ingrese el DNI del Cliente: ");
            do
                dni = Console.ReadLine();
            while (!(ValidarDNI(dni)));

            Cliente cliente = dbClientes.GetCliente(dni);
            
            Console.WriteLine("");
            if (cliente == null)
            {
                Console.WriteLine("Cliente Inexistente !!!");
                Console.ReadKey();
                return null;
            }
            
            Console.WriteLine("Cliente Encontrado:");
            cliente.ImprimirDatos();
            Console.WriteLine("");
            Console.WriteLine("Continuar Operando? (S)i, (N)o");
            if (PreguntaSiNo())
                return cliente;
            return null;
        }


        public bool ValidarDNI(string dni)
        {
            if (Regex.Match(dni, @"^[0-9]?[0-9][0-9][0-9][0-9][0-9][0-9][0-9]$").Success)
                return true;
            Console.WriteLine("DNI invalido, por favor ingrese un DNI Valido:");
            return false;
        }


        public void agregarVehiculo(DBClientes dbClientes, DBVehiculos dbVehiculos, DBEquipos dbEquipos)
        {
            Cliente cliente = buscarCliente(dbClientes);
            if (cliente != null)
            {
                AltaVehiculo alta = new AltaVehiculo(dbVehiculos, dbEquipos);
                cliente.addVehiculo(alta.Vehiculo);
            }

        }


        public void verVehiculosCliente(DBClientes dbClientes)
        {
            Cliente cliente = buscarCliente(dbClientes);
            if (cliente != null)
                cliente.imprimirListaVehiculos();
        }


        public Boolean PreguntaSiNo()
        {
            ConsoleKeyInfo tecla;
            string resultado;

            do
            {
                tecla = Console.ReadKey(true);
                resultado = tecla.KeyChar.ToString();
            }
            while (!(resultado == "S" || resultado == "s" || resultado == "N" || resultado == "n"));

            if (resultado == "S" || resultado == "s")
                return true;
            else //mepa q faltaba. Mariana
                return false;
        }
    }       
}
